/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import modelo.Funcion;

/**
 *
 * @author Matias Garcia
 */
public class FuncionesDao {
    private static FuncionesDao instance = null;
    
    public FuncionesDao() {
        //Instanciacion de Singleton
    }

    public static FuncionesDao getInstance() {
        if (instance == null) {
            instance = new FuncionesDao();
        }
        return instance;
    }
    
    public ArrayList getFuncionesDePerfil (Connection c,int idPerfil) throws SQLException, Exception {
        //Creo la variable lista donde la consulta me va a devolver los registros
        
        ArrayList lista = new ArrayList();
        PreparedStatement pstmt = null;

        //Creo la consulta
            String query = "SELECT * FROM funciones f inner join funcionesdeperfiles p on p.idfuncion = f.idfuncion where p.idperfil = ?";
            //Creo la sentencia
            pstmt = c.prepareStatement(query);
            pstmt.setInt(1, idPerfil);
            //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
            ResultSet rs = pstmt.executeQuery();
 
            //Cargo la lista
            Funcion fun = null;
            while (rs.next()) {
                fun = new Funcion(rs.getInt("idFuncion"),rs.getString("nombre"),rs.getString("descripcionPantalla"));  
                lista.add(fun);
            }
            pstmt.close();
            //Retorno la lista
            return lista;
    }

    public ArrayList<Funcion> getFuncionesDisponibles(Connection c, int idPerfil) throws SQLException {
         //Creo la variable lista donde la consulta me va a devolver los registros
        
        ArrayList lista = new ArrayList();
        PreparedStatement pstmt = null;

        //Creo la consulta
            String query = "SELECT * FROM funciones fu WHERE fu.idfuncion NOT IN (SELECT p.idfuncion FROM funciones f INNER JOIN funcionesdeperfiles p ON p.idfuncion = f.idfuncion WHERE p.idperfil = ?)";
            //Creo la sentencia
            pstmt = c.prepareStatement(query);
            pstmt.setInt(1, idPerfil);
            //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
            ResultSet rs = pstmt.executeQuery();
 
            //Cargo la lista
            Funcion fun = null;
            while (rs.next()) {
                fun = new Funcion(rs.getInt("idFuncion"),rs.getString("nombre"),rs.getString("descripcionPantalla"));  
                lista.add(fun);
            }
            pstmt.close();
            //Retorno la lista
            return lista;
    }

    public boolean funcionPermitida(Connection c, int idPerfil, String nombreFuncion) throws SQLException {
        PreparedStatement pstmt = null;
        String query = "SELECT * FROM funciones f inner join funcionesdeperfiles p on p.idfuncion = f.idfuncion where p.idperfil = ? and f.nombre = ?";
        //Creo la sentencia
        pstmt = c.prepareStatement(query);
        pstmt.setInt(1, idPerfil); 
        pstmt.setString(2, nombreFuncion);
        //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
        ResultSet rs = pstmt.executeQuery();
        
        boolean resultado = rs.next();
        
        pstmt.close();
              
        return(resultado);
    }
}
